﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CrankShaftAnalysisSystem.Devices
{
    public class DistanceMT2571
    {
        private static readonly DistanceMT2571 instance = new DistanceMT2571();

        /// <summary>
        /// 显式的静态构造函数用来告诉C#编译器在其内容实例化之前不要标记其类型
        /// 静态构造函数是C#的一个新特性，其实好像很少用到。 
        /// 不过当我们想初始化一些静态变量的时候就需要用到它了。 这个构造函数是属于类的，
        /// 而不是属于哪里实例的，就是说这个构造函数只会被执行一次。 
        /// 也就是在创建第一个实例或引用任何静态成员之前，由.NET自动调用
        /// </summary>
        static DistanceMT2571() { }

        private DistanceMT2571()
        {
            Device = new SnapCounter("MT2571Config.xml");
        }

        public static DistanceMT2571 Instance
        {
            get
            {
                return instance;
            }
        }

        [Description("Advantech PCI1784设备")]
        public SnapCounter Device;

        public double Distance { get; private set; }

        public double InitDistance { get; private set; } = -540;

        public bool Initialised { get
            {
                return Device.udControl.Initialized;
            } 
        }

        /// <summary>
        /// Get Distance At um
        /// </summary>
        /// <returns></returns>
        public double GetDistance()
        {
            var cnt = Device.GetValue();
            double dis = cnt * 0.1;
            Distance = dis;
            return dis;
        }

        public void Begin()
        {
            try
            {
                Device.Begin();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[MT2571 Error]: {ex.Message}");
            }
        }
    }
}
